package org.example;

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;

public class FileSyncClient {
    private static final String CLIENT_FOLDER_PATH = "D:/clouder/client";
    private static final String SERVER_IP = "127.0.0.1";
    private static final int SERVER_PORT = 8888;

    public static void main(String[] args) throws Exception {
        // 创建文件变更观察者
        FileAlterationObserver observer = new FileAlterationObserver(CLIENT_FOLDER_PATH);
        observer.addListener(new FileSyncListener());

        // 创建文件变更监控器
        FileAlterationMonitor monitor = new FileAlterationMonitor(1000);
        monitor.addObserver(observer);

        // 启动监控器
        monitor.start();

        // 连接到服务器
      //  FileSyncSocketClient socketClient = new FileSyncSocketClient(SERVER_IP, SERVER_PORT);
        FileSyncSocketClient socketClient = new FileSyncSocketClient();

        // 循环等待文件变更事件
        while (true) {
            // 执行文件变更事件回调
            observer.checkAndNotify();
            // 暂停一段时间
            Thread.sleep(1000);
        }

        // 停止监控器
        // monitor.stop();
    }

    private static class FileSyncListener implements FileAlterationListener {
        @Override
        public void onStart(FileAlterationObserver observer) {
            // 监听器启动时触发事件
            System.out.println("文件监听器已启动");
        }

        @Override
        public void onDirectoryCreate(File directory) {
            // 目录被创建时触发事件
            System.out.println("目录被创建：" + directory.getAbsolutePath());
        }

        @Override
        public void onDirectoryChange(File directory) {
            // 目录被修改时触发事件
            System.out.println("目录被修改：" + directory.getAbsolutePath());
        }

        @Override
        public void onDirectoryDelete(File directory) {
            // 目录被删除时触发事件
            System.out.println("目录被删除：" + directory.getAbsolutePath());
        }

        @Override
        public void onFileCreate(File file) {
            // 文件被创建时触发事件
            System.out.println("文件被创建：" + file.getAbsolutePath());
            // 向服务器发送文件创建请求
            FileSyncSocketClient.sendFileCreateRequest(file);
        }

        @Override
        public void onFileChange(File file) {
            // 文件被修改时触发事件
            System.out.println("文件被修改：" + file.getAbsolutePath());
            // 向服务器发送文件修改请求
            FileSyncSocketClient.sendFileUpdateRequest(file);
        }

        @Override
        public void onFileDelete(File file) {
            // 文件被删除时触发事件
            System.out.println("文件被删除：" + file.getAbsolutePath());
            // 向服务器发送文件删除请求
            FileSyncSocketClient.sendFileDeleteRequest(file);
        }

        @Override
        public void onStop(FileAlterationObserver observer) {
            // 监听器停止时触发事件
            System.out.println("文件监听器已停止");
        }
    }
}